package com.jason.canvas.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Region;
import android.util.AttributeSet;
import android.view.View;

/**
 * @DESC: Region组合模式使用
 * @Author: Jason
 * @Date: 16/9/22
 * @Time: 16:33
 *
 * Region.Op.DIFFERENCE: 第一个区域与第二个区域不同的区域(即第一个未与第二个重合区域)
 * Region.Op.INTERSECT:  第一个区域与第二个区域相交的区域
 * Region.Op.REPLACE:    最终区域为第二个区域
 * Region.Op.REVERSE_DIFFERENCE: 最终区域为第二个区域与第一个区域不同的区域(即第二个区域与第一个区域未相交的区域)
 * Region.Op.UNION:      最终区域为第一个区域和第二个区域
 * Region.Op.XOR:        最终区域为第一个区域和第二个区域减去两者相交的区域
 *
 *
 *
 *
 */

public class ClipRegionView14 extends View {

    private Region mRegionA, mRegionB; // 区域A和区域B对象
    private Paint mPaint;

    public ClipRegionView14(Context context, AttributeSet attrs) {
        super(context, attrs);

        // 实例化画笔并设置属性
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setColor(Color.WHITE);
        mPaint.setStrokeWidth(2);

        // 实例化区域
        mRegionA = new Region(100, 100, 300, 300);
        mRegionB = new Region(200, 200, 400, 400);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        // 填充颜色
        canvas.drawColor(Color.BLUE);

        canvas.save();

        // 裁剪区域A
        canvas.clipRegion(mRegionA);

        // 再通过组合方式裁剪区域B
        //canvas.clipRegion(mRegionB, Region.Op.DIFFERENCE);
        //canvas.clipRegion(mRegionB, Region.Op.INTERSECT);
        //canvas.clipRegion(mRegionB, Region.Op.REPLACE);
        //canvas.clipRegion(mRegionB, Region.Op.REVERSE_DIFFERENCE);
        //canvas.clipRegion(mRegionB, Region.Op.UNION);
        canvas.clipRegion(mRegionB, Region.Op.XOR);

        // 填充颜色
        canvas.drawColor(Color.RED);

        canvas.restore();

        // 绘制框框
        canvas.drawRect(100, 100, 300, 300, mPaint);
        canvas.drawRect(200, 200, 400, 400, mPaint);
    }
}
